<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>逻辑运算符</title>
    <script>
        /* 逻辑运算符 */
        /* 
        JS中共有三种运算符
        ！非
            - ！可以用来对一个值进行非运算
            所谓非运算就是对一个布尔值进行取反
            如果对一个值进行两次取反，值不会变化
            如果对非布尔值进行取反，则先转换为布尔值在进行非操作
            可以利用该特点对其他数据类型转换为布尔值类型
            可以为一个任意数据类型取两次反来转换为布尔值
            原理和Boolean()一样
        && 与
            -&& 可以对符号两侧的值进行与运算并返回结果
            运算规则
            两端都是true则返回true
            两端只要有一个false则返回false
            “JS”中的与是属于短路运算符如果第一个值为false则不会再看第二个值
        || 或
            可以对两侧的值进行或运算并返回结果
            两个都是false则返回false
            两个只要有一个true则返回true
            “JS”中的或属于短路的或，如果第一个值为true则不会检查第二个值
        */


        var result = true && false;
        console.log("result=" + result);
        //第一个值为true则会检查第二个值
        true && alert("弹出否！");
        //第一个值为false则不会检查第二个值
        false && alert("tanchufou !!")

        result1 = false || false;
        console.log("result1=" + result1);
        console.log(typeof result1);



        var a = true;
        //对a进行非运算
        //!a;//结果不变（未赋值）
        a = !a;
        //console.log("a=" + a)

        //对非布尔值进行非操作
        var b = 10;
        b = !b;
        //对数值进行两次取反可将数据类型转换为布尔值
        b = !!b;

        //console.log("b=" + b);
        //console.log(typeof b);
        /* 
        && || 非布尔值的情况
         -对于非布尔值及逆行与或运算时，会将其转换为布尔值在进行运算，并且返回原值
          与运算
          如果两个值都为true则返回后面的值
          如果其中有一个false则返回false的原值
          如果两个值都是false则返回前面的值
          或运算
          如果第一个值是true，则直接返回第一个值
          如果第一个值为false，则直接返回第二个值
          
        */
        var result2 = 1 && 2;
        var result2 = NaN && 0;
        var result2 = 0 && NaN;
        console.log("result2=" + result2); //result = 2
    </script>
</head>

<body>

</body>

</html>